Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

overhead με Encoding.UTF8

Îåêßíçóå áðü ôï ìÝëïò basilis. Τελευταία δημοσίευση από το μέλος Νατάσα Μανουσοπούλου στις 11-03-2007, 17:22. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-03-2007, 18:00 25919

    overhead με Encoding.UTF8

    Καλησπέρα,

    γράφω ένα πρόγραμμα σε C# που χρησιμοποιεί BinaryWriter με Encoding.UTF8. Στο αρχείο αποθηκεύω πίνακες χαρακτήρων μήκους 40. Το πρόβλημα είναι ότι όταν αποθηκεύω ελληνικούς χαρακτήρες ο pointer στο αρχείο δείχνει πιο μετά από το 40(πχ 48) ενώ όταν αποθηκεύω λατινικούς δεν έχω κανένα πρόβλημα.

    Αποθηκεύονται επιπλέον χαρακτήρες όταν χρησιμοποιώ ελληνικά? Το πρόβλημα μου είναι ότι θέλω να έχω randomaccess στο αρχείο μου και επομένως χρειάζομαι fixed την κάθε εγγραφή.

    Μπορείτε να μου προτείνετε κάτι;

    Ευχαριστώ

  •  05-03-2007, 18:09 25920 σε απάντηση της 25919

    Απ: overhead με Encoding.UTF8

    Έτσι ακριβώς δουλεύει το UTF8, αποθηκεύει 1 byte για τους λατινικούς χαρακτήρες και 2 ή περισσότερα για όλους τους άλλους, συμπεριλαμβανομένων και των ελληνικών. Για τα ελληνικά, δεν κερδίζεις πολλά πράγματα χρησιμοποιώντας UTF8. Θα μπορούσες άνετα να χρησιμοποιήσεις το απλό Unicode και να έχεις το ίδιο αποτέλεσμα.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  05-03-2007, 18:39 25922 σε απάντηση της 25919

    Απ: overhead με Encoding.UTF8

    Χρειάζεσαι απεξάπαντως να χρησιμοποιήσεις BinaryWriter ? Ένας απλός StreamWriter / Reader δε σου κάνει;

    Angel
    O:]
  •  05-03-2007, 18:52 25924 σε απάντηση της 25922

    Απ: overhead με Encoding.UTF8

    Βασικά μέχρι τώρα έγραφα σε c++ και java τώρα άρχισα σε C#. Είμαι πολύ καινούριος...

    Λογικά θα μου κάνει. Δε θα έχω πρόβλημα αν χρησιμοποιήσω StreamWriter ? Ο StreamWriter είναι για text αρχεία έτσι? θα προτιμούσα να κρατήσω το αρχείο σε binary αλλά αν δεν γίνεται αλλιώς οκ...

  •  05-03-2007, 19:37 25929 σε απάντηση της 25924

    Απ: overhead με Encoding.UTF8

    Αν μας έλεγες τι προσπαθείς να κάνεις, θα μπορούσαμε να σε βοηθήσουμε περισσότερο...


    Vir prudens non contra ventum mingit
  •  05-03-2007, 20:05 25931 σε απάντηση της 25920

    Απ: overhead με Encoding.UTF8

    Παναγιώτης Καναβός:
    Έτσι ακριβώς δουλεύει το UTF8, αποθηκεύει 1 byte για τους λατινικούς χαρακτήρες και 2 ή περισσότερα για όλους τους άλλους, συμπεριλαμβανομένων και των ελληνικών. Για τα ελληνικά, δεν κερδίζεις πολλά πράγματα χρησιμοποιώντας UTF8. Θα μπορούσες άνετα να χρησιμοποιήσεις το απλό Unicode και να έχεις το ίδιο αποτέλεσμα.

    Αντιμετωπίζω το ίδιο πρόβλημα ακόμα και βάζοντας κωδικοποίηση Encoding.Unicode. Όταν ανοίξω μετά για ανάγνωση το αρχείου που αποθήκευσα, τα πεδία βγαίνουν εκτός των επιτρεπόμενων τιμών (ο pointer του αρχείου βρίσκεται αλλού αντί αλλού και διαβάζει ότι να'ναι) υπάρχει τρόπος διατηρώντας το αρχείο σε binary μορφή να καταφέρω να έχω πεδία fixed και ελληνικούς χαρακτήρες;

     

  •  06-03-2007, 19:17 25991 σε απάντηση της 25931

    Απ: overhead με Encoding.UTF8

    basilis:
    Αντιμετωπίζω το ίδιο πρόβλημα ακόμα και βάζοντας κωδικοποίηση Encoding.Unicode. Όταν ανοίξω μετά για ανάγνωση το αρχείου που αποθήκευσα, τα πεδία βγαίνουν εκτός των επιτρεπόμενων τιμών (ο pointer του αρχείου βρίσκεται αλλού αντί αλλού και διαβάζει ότι να'ναι) υπάρχει τρόπος διατηρώντας το αρχείο σε binary μορφή να καταφέρω να έχω πεδία fixed και ελληνικούς χαρακτήρες;


    Μην ξεχνάς ότι αποθηκεύοντας 40 Unicode χαρακτήρες δημιουργείς αρχείο μεγέθους 80 bytes.

    Νατάσα Μανουσοπούλου
  •  10-03-2007, 13:04 26258 σε απάντηση της 25991

    Απ: overhead με Encoding.UTF8

    υπάρχει τρόπος να μετατρέψω τους αγγλικούς χαρακτήρες σε Unicode έτσι ώστε και αυτοί να αποθηκεύονται σαν 2 bytes? έτσι θα έχω μια ομοιομορφία στο πόσο χώρο καταναλώνουν οι εγγραφές και θα μπορώ να κάνω randomaccess
  •  11-03-2007, 17:22 26308 σε απάντηση της 26258

    Απ: overhead με Encoding.UTF8

    char[] characters = "abcdαβγδ1234".ToCharArray();

    using (System.IO.StreamWriter sw = new System.IO.StreamWriter(
           fileName,
           false,
           System.Text.Encoding.Unicode))
    {
        sw.Write(characters);
    }


    Νατάσα Μανουσοπούλου
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems